home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Internet Tools 1993 July / Internet Tools.iso / RockRidge / mail / pp / pp-6.0 / Lib / or / or_getpn.c < prev    next >
Encoding:
C/C++ Source or Header  |  1991-12-18  |  1.5 KB  |  84 lines

  1. /* or_getpn.c: get personal name out of the tree */
  2.  
  3. # ifndef lint
  4. static char Rcsid[] = "@(#)$Header: /xtel/pp/pp-beta/Lib/or/RCS/or_getpn.c,v 6.0 1991/12/18 20:23:08 jpo Rel $";
  5. # endif
  6.  
  7. /*
  8.  * $Header: /xtel/pp/pp-beta/Lib/or/RCS/or_getpn.c,v 6.0 1991/12/18 20:23:08 jpo Rel $
  9.  *
  10.  * $Log: or_getpn.c,v $
  11.  * Revision 6.0  1991/12/18  20:23:08  jpo
  12.  * Release 6.0
  13.  *
  14.  */
  15.  
  16.  
  17.  
  18. #include "or.h"
  19. #include "util.h"
  20.  
  21.  
  22. extern void fixup_space();
  23.  
  24. /* --- *** ---
  25. Get PN out of tree and put into buf
  26. --- *** --- */
  27.  
  28.  
  29. int or_getpn (or, buf)
  30. OR_ptr            or;
  31. char            *buf;
  32. {
  33.     OR_ptr        ptr;
  34.  
  35.     PP_DBG (("or_util.c/or_getpn ()"));
  36.     buf[0] = '\0';
  37.  
  38.  
  39.     if ((ptr = or_find (or, OR_G, NULLCP)) != NULLOR) {
  40.         if ((int)strlen (ptr -> or_value) > 1
  41.                 && index (ptr -> or_value, '.') == NULLCP) {
  42.                 (void) strcat (buf, ptr -> or_value);
  43.                 (void) strcat (buf, ".");
  44.         }
  45.         else
  46.                 return FALSE;
  47.     }
  48.  
  49.  
  50.     if ((ptr = or_find (or, OR_I, NULLCP)) != NULLOR) {
  51.         char    *p,
  52.             *q;
  53.  
  54.         q = &buf[strlen(buf)];
  55.         for (p = ptr -> or_value; *p != '\0'; p++) {
  56.             if (!isalpha (*p))
  57.                 return FALSE;
  58.             *q++ = *p;
  59.             *q++ = '.';
  60.         }
  61.         *q = '\0';
  62.     }
  63.  
  64.  
  65.  
  66.     if ((ptr = or_find (or, OR_S, NULLCP)) != NULLOR) {
  67.         if (index (ptr -> or_value, '.') != NULLCP) {
  68.                 /* Surname with "." - yuk */
  69.                 if (buf[0] == '\0'
  70.                 || (int)strlen (ptr -> or_value) < 3
  71.                 || ptr -> or_value[0] == '.'
  72.                 || ptr -> or_value[1] == '.' )
  73.                     return FALSE;
  74.         }
  75.         (void) strcat (buf, ptr -> or_value);
  76.     }
  77.     else
  78.         return FALSE;
  79.  
  80.     fixup_space(buf, buf);
  81.     PP_DBG (("or_util.c/or_getpn: Got PN '%s'", buf));
  82.     return TRUE;
  83. }
  84.